package com.tjetc;

import java.util.Scanner;

public class _5TryCatchExercise {

    public static void main(String[] args) {
        /*
            如果用户输入的不是一个整数，就提示他反复输入，直到输入一个整数为止。

            思路分析：不再仅针对一个方法 还需要整体的流程进行分析
            1. 输入
                一个整数
            2. 输出
                输出这个数
            3. 处理逻辑
                （1）异常逻辑不会写？先写正常逻辑 在思考异常逻辑
                （2）
                    怎么认为一个数不是一个整数？ 利用Integer.parseInt()
                 （3）有可能出现错误 错误怎么捕获？当我们不知道异常的时候 可以捕获大的异常
                 (4) 循环输入 一直输入 只要有死循环 就一定要有结束条件
         */

        Scanner scanner = new Scanner(System.in);;
        int num = 0;
        /*
            while (true) {
            if (getCompleteTokenInBuffer(pattern) != null) {
                matchValid = true;
                cacheResult();
                return revertState(true);
            }
            if (needInput) // 这里为false 读取的还是缓冲区中的内容 没有重新读取
                readInput(); // 这个方法执行才会读取新内容
            else
                return revertState(false);
        }

         */
        while (true) {
            try {
                System.out.print("请输入一个整数数字：");
                num = scanner.nextInt();
                break;
            } catch (Exception e) {
//                System.out.print(e);
                System.out.println("输入的不是一个整数");
                scanner.next();
            }
        }
        System.out.println(num);
    }


    public static void main1(String[] args) {
//        System.out.println(method1()); // 4
//        System.out.println(method2()); // 4
        System.out.println(method3()); // 3
    }

    // 如果编写错误，修改，修改后执行的最后结果？

    // 第一题
    public static int method1() {
        try {
            String[] names = new String[3];
            if (names[1].equals("tom")) {
                // 异常 空指针异常
                System.out.println(names[1]);
            } else {
                names[3] = "zhangsan";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch (NullPointerException e) {
            return 3; // 被捕获
        } finally {
            return 4; // 最后要执行 返回4
//            System.out.println(2); // 编译失败：无法访问的语句
        }
    }


    // 第二题
    public static int method2() {
        int i = 1;  // 1
        try {
            i++;  // 2
            String[] names = new String[3];
            if (names[1].equals("tom")) {
                // 异常 空指针异常
                System.out.println(names[1]);
            } else {
                names[3] = "zhangsan"; // 异常 数组越界
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;  // 捕获
        } catch (NullPointerException e) {
            return ++i;
        } finally {
            return ++i;
        }
    }


    public static int method3() {
        int i = 1;  // 1
        try {
            i++;  // 2
            String[] names = new String[3];
            if (names[1].equals("tom")) {
                System.out.println(names[1]);
            } else {
                names[3] = "zhangsan";
            }
            return 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            return 2;
        } catch (NullPointerException e) {
            return ++i; // 会用一个临时变量 temp 来保存i temp = 3
        } finally {
            ++i;
            System.out.println("i=" + i); // 4
        }
    }


}

